package nl.jaapniek.model;

import java.util.ArrayList;
import java.util.List;

public class Groep {
	private int id;
	private List<GroepAttr> groepAttrs;
	private Tabel tabel;
	private Database database;
	private String tabelNaam;
	private boolean isPrimary;
	private boolean isAlternative;

	public Groep() {
		groepAttrs = new ArrayList<GroepAttr>();
	}

	public Groep(Database database, boolean isPrimary, boolean isAlternative) {
		this.database = database;
		this.isAlternative = isAlternative;
		this.isPrimary = isPrimary;
		groepAttrs = new ArrayList<GroepAttr>();
	}

	public void addGroepAttr(Veld veld) {
		assert (tabel.getVelden().contains(veld));
		GroepAttr attr = new GroepAttr();
		attr.setVeld(veld);
		attr.setDatabase(this.database);
		attr.setTabel(this.tabel);
		groepAttrs.add(attr);
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public List<GroepAttr> getGroepAttrs() {
		return groepAttrs;
	}

	public void setGroepAttrs(List<GroepAttr> groepAttrs) {
		this.groepAttrs = groepAttrs;
	}

	public Tabel getTabel() {
		return tabel;
	}

	public void setTabel(Tabel tabel) {
		this.tabel = tabel;
	}

	public Database getDatabase() {
		return database;
	}

	public void setDatabase(Database database) {
		this.database = database;
	}

	public boolean isPrimary() {
		return isPrimary;
	}

	public void setPrimary(boolean isPrimary) {
		this.isPrimary = isPrimary;
	}

	public boolean isAlternative() {
		return isAlternative;
	}

	public void setAlternative(boolean isAlternative) {
		this.isAlternative = isAlternative;
	}

	public String toString() {
		String s = tabel.getNaam();
		for (GroepAttr a : groepAttrs) {
			s += "\n\t" + a.getVeld().getNaam();
		}
		return s;
	}

	@Override
	public boolean equals(Object object) {
		if(object instanceof Groep){
			Groep groep = (Groep) object;
			if (groep.tabel.getNaam().equals(tabel.getNaam())
					&& groep.database.getNaam().equals(database.getNaam())
					&& groep.isAlternative == isAlternative
					&& groep.isPrimary == isPrimary) {
				return true;
			}
		}
		return false;
	}

	public String getTabelNaam() {
		return tabelNaam;
	}

	public void setTabelNaam(String tabelNaam) {
		this.tabelNaam = tabelNaam;
	}

}
